package com.gome.han.bigdata.spark.core.rdd.operation.transformation

import org.apache.spark.rdd.RDD
import org.apache.spark.{HashPartitioner, SparkConf, SparkContext}

/**
 * @author Hanpeng
 * @date 2021/1/13 21:46
 * @description:
 */
object PartitionByOperation {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Operator")
    val sc = new SparkContext(sparkConf)

    // TODO 算子 - (Key - Value类型)
    val rdd = sc.makeRDD(List(1,2,3,4),2)

    val mapRDD:RDD[(Int, Int)] = rdd.map((_,1))
    // RDD => PairRDDFunctions
    // 隐式转换（二次编译）编译不过 它在作用域范围内找到转换规则，让它编译通过
    //

    // partitionBy根据指定的分区规则对数据进行重分区 数据移动了位置 分区数量不变化
    val newRDD: RDD[(Int, Int)] = mapRDD.partitionBy(new HashPartitioner(2));
    newRDD.partitionBy(new HashPartitioner(2))

    newRDD.saveAsTextFile("output")




    sc.stop()

  }
}
